package com.gmail.vkhanh234.PickupMoney; import com.darkblade12.particleeffect.ParticleEffect; import com.gmail.vkhanh234.PickupMoney.Config.Blocks; import com.gmail.vkhanh234.PickupMoney.Config.Entities; import com.gmail.vkhanh234.PickupMoney.Config.Language; import com.gmail.vkhanh234.PickupMoney.Listener.MainListener; import com.gmail.vkhanh234.PickupMoney.Listener.MultiplierListener; import com.gmail.vkhanh234.PickupMoney.Listener.MythicMobsListener; import net.milkbowl.vault.economy.Economy; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class PickupMoney extends JavaPlugin implements Listener { public static FileConfiguration fc; public static Economy economy = null; public Entities entities = new Entities(this); public Language language = new Language(this); public HashMap<UUID,Integer> dropMulti = new HashMap<>(); public HashMap<UUID,Integer> pickupMulti = new HashMap<>(); public Blocks blocks = new Blocks(this); String version = getDescription().getVersion(); ConsoleCommandSender console = getServer().getConsoleSender(); private String prefix = "[PickupMoney] "; private boolean preVer = false; public List<UUID> spawners = new ArrayList<>(); public String regex="[0-9]+\\.[0-9]+"; { loadConfiguration(); initConfig(); } @Override public void onEnable() { if (fc.getBoolean("notiUpdate")) { sendConsole(ChatColor.GREEN + "Current version: " + ChatColor.AQUA + version); String vers = getNewestVersion(); if (vers != null) { sendConsole(ChatColor.GREEN + "Latest version: " + ChatColor.RED + vers); if (!vers.equals(version)) { sendConsole(ChatColor.RED + "There is a new version on Spigot!"); sendConsole(ChatColor.RED + "https://www.spigotmc.org/resources/11334/"); } } } if(!getServer().getPluginManager().isPluginEnabled("Vault")){ sendConsole("Vault is not installed or not enabled. "); sendConsole("This plugin will be disabled."); getServer().getPluginManager().disablePlugin(this); return; } String[] bukkver = getServer().getBukkitVersion().split("\\."); if(Integer.parseInt(bukkver[1].substring(0,1))<8){ sendConsole("Server version is too old. Please update!"); sendConsole("This plugin will be disabled."); getServer().getPluginManager().disablePlugin(this); return; } if (!setupEconomy() ) { getLogger().info(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName())); getServer().getPluginManager().disablePlugin(this); return; } getServer().getPluginManager().registerEvents(new MainListener(this), this); getServer().getPluginManager().registerEvents(new MultiplierListener(this), this); loadMultipliers(); try{ Class.forName("net.elseland.xikage.MythicMobs.API.Bukkit.Events.MythicMobDeathEvent"); getServer().getPluginManager().registerEvents(new MythicMobsListener(this), this); } catch (ClassNotFoundException e) { } } private void loadMultipliers() { for(Player p:getServer().getOnlinePlayers()){ loadMultiplier(p); } } @Override public void onDisable() { // TODO Insert logic to be performed when the plugin is disabled } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if(!sender.hasPermission("PickupMoney.command")){ sender.sendMessage(language.get("noPermission")); return true; } if (args.length >= 1) { try { if (args[0].equals("reload") && sender.hasPermission("PickupMoney.admincmd")) { reloadConfig(); initConfig(); sender.sendMessage(language.get("reload")); } else if (args[0].equals("drop") && sender instanceof Player && args.length == 2) { Player p = (Player) sender; float money = KUtils.getRandom(args[1]); if(money<fc.getInt("minimumCmdDrop")){ p.sendMessage(language.get("miniumCmdDrop").replace("{money}",String.valueOf(fc.getInt("minimumCmdDrop")))); return true; } Set<Material> set = null; Block b = p.getTargetBlock(set, 6); if (costMoney(money, p)) { spawnMoney(p,money, b.getLocation()); } else { p.sendMessage(language.get("noMoney")); } } else showHelp(sender); } catch (Exception e){ showHelp(sender); } } else{ showHelp(sender); } return true; } public void loadMultiplier(Player p){ int id=1,ip=1; for (PermissionAttachmentInfo perms : p.getEffectivePermissions()) { String perm = perms.getPermission(); if (perm.toLowerCase().startsWith("pickupmoney.multiply.")) { String[] spl = perm.split("\\."); int num = Integer.parseInt(spl[3]); if(spl[2].equals("drop") && id<num) id = num; else if(spl[2].equals("pickup") && ip<num) ip = num; } } dropMulti.put(p.getUniqueId(),id); pickupMulti.put(p.getUniqueId(),ip); } public void sendConsole(String s){ console.sendMessage(prefix+s); } private void showHelp(CommandSender sender) { sender.sendMessage(ChatColor.RED+"PickupMoney version "+version); if(sender.hasPermission("PickupMoney.admincmd")) sender.sendMessage(ChatColor.GREEN+"Reload - "+ ChatColor.AQUA+"/pickupmoney reload"); sender.sendMessage(ChatColor.GREEN+"Drop Money - "+ ChatColor.AQUA+"/pickupmoney drop <amount>"); } public float getMoneyOfPlayer(Player p, String val){ if (val.contains("%")){ String s = val.replace("%",""); int percent = KUtils.getRandomInt(s); return Double.valueOf(economy.getBalance(p)).floatValue()*percent/100; } else return KUtils.getRandom(val); } public String getMoney(String name) { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(name); if(matcher.find()) return matcher.group(0); return "0"; } public void giveMoney(float amount, Player p) { economy.depositPlayer(p, amount); } public boolean costMoney(float amount, Player p){ if(economy.getBalance(p)>=amount){ economy.withdrawPlayer(p,amount); return true; } return false; } public void spawnMoney(Player p,float money,Location l){ if(dropMulti.containsKey(p.getUniqueId())) money*=dropMulti.get(p.getUniqueId()); Item item = l.getWorld().dropItemNaturally(l, getItem(Float.valueOf(money).intValue())); String m = String.valueOf(money); if (!m.contains(".")) m=m+".0"; item.setCustomName(language.get("nameSyntax").replace("{money}", m)); item.setCustomNameVisible(true); } public void spawnParticle(Location l){ if (fc.getBoolean("particle.enable")) { ParticleEffect.fromName(fc.getString("particle.type")).display((float) 0.5, (float) 0.5, (float) 0.5, 1, fc.getInt("particle.amount"), l, 20); } } public boolean checkWorld(Location location) { if(fc.getList("disableWorld").contains(location.getWorld().getName())) return false; return true; } public ItemStack getItem(int money){ ItemStack item; if(money<fc.getInt("item.small.amount")){ item = new ItemStack(Material.getMaterial(fc.getString("item.small.type")),1); } else if(money<fc.getInt("item.normal.amount")){ item = new ItemStack(Material.getMaterial(fc.getString("item.normal.type")),1); } else{ item = new ItemStack(Material.getMaterial(fc.getString("item.big.type")),1); } ItemMeta meta = item.getItemMeta(); List<String> lore = new ArrayList<>(); lore.add(String.valueOf(KUtils.getRandomInt(1, 100000000))); meta.setLore(lore); item.setItemMeta(meta); return item; } private void loadConfiguration() { getConfig().options().copyDefaults(true); saveConfig(); getConfig().options().copyDefaults(false); } private void initConfig(){ fc = getConfig(); language = new Language(this); entities = new Entities(this); } private boolean setupEconomy() { RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); if (economyProvider != null) { economy = economyProvider.getProvider(); } return (economy != null); } public static String getMessage(String type) { return KUtils.convertColor(fc.getString("Message."+type)); } private String getNewestVersion() { try { URL url = new URL("https://dl.dropboxusercontent.com/s/a890l19kn0fv32l/PickupMoney.txt"); URLConnection con = url.openConnection(); con.setConnectTimeout(2000); con.setReadTimeout(1000); InputStream in = con.getInputStream(); return getStringFromInputStream(in); } catch(IOException ex) { sendConsole(ChatColor.RED+"Failed to check for update!"); } return null; } private static String getStringFromInputStream(InputStream is) { BufferedReader br = null; StringBuilder sb = new StringBuilder(); String line; try { br = new BufferedReader(new InputStreamReader(is)); while ((line = br.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return sb.toString(); } }